/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import dominio.Laboratorio;
import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.swing.JOptionPane;

/**
 *
 * @author eagle
 */
public class LaboratorioDao {

  private EntityManager em;

   public LaboratorioDao(EntityManager em) {
        this.em = em;
    }

    public LaboratorioDao() {
       
    }




   public Laboratorio crearLaboratorio( int capacidadLab, String nombreLab, String descripcionLab,
           String disponibleLab) {
        Laboratorio a = new Laboratorio(capacidadLab, nombreLab, descripcionLab, disponibleLab);
        em.persist(a);//con esta funcion lo guarda en la base de datos
        return a;
    }

    public Laboratorio encontrarLaboratorio(Integer idLaboratorio) {
        return em.find(Laboratorio.class, idLaboratorio);// con esta funcion se buscas un dato por primary key, el primer parametro es nuestra clase entidad
    }

    public void borrarLaboratorio(Integer idLaboratorio) {
        Laboratorio a = encontrarLaboratorio(idLaboratorio);//en este caso podemos borrar un usuario por nombre
        if (a != null) {//si no lo encuentra por supuesto no lo intenta borrar
         em.remove(a);// borra de la tabla ese registro
            }

    }

    public Laboratorio actualizarLaboratorio(Integer idLaboratorio,
                int capacidadLab, String nombreLab, String descripcionLab, String disponibleLab) {
        Laboratorio a = em.find(Laboratorio.class, idLaboratorio); //se usa el entity manager para encontrarlo luego cuando se llame ActualizarUsuario se hace commit y va a persistir el usuario actualizado
        if (a != null) {
            a.setIdLaboratorio(idLaboratorio);
            a.setcapacidadLab(capacidadLab);
            a.setnombreLab(nombreLab);
            a.setdescrpcionLab(descripcionLab);
            a.setdisponibilidadLab(disponibleLab);

        }
        return a;
    }

    public Collection<Laboratorio> encontrarLaboratorio() { //encontrar todos los usuarios
        Query query = em.createQuery("SELECT a FROM Laboratorio a");// Ojo la sentencia está en Java Query Language, no SQL
        return (Collection<Laboratorio>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }



    public List<Laboratorio> findAll() {
       Query query = em.createQuery("select object(o) from Laboratorio as o");
       return (List<Laboratorio>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }

    public Laboratorio ActualizarLaboratorio(Integer idlaboratorio) {
        em.getTransaction().begin();
        Laboratorio e = this.encontrarLaboratorio(idlaboratorio);
        if (e != null) {
            e.setIdLaboratorio(idlaboratorio);
        }
        else {
            JOptionPane.showMessageDialog(null, "Error al actualizar laboratorio", null, JOptionPane.ERROR_MESSAGE);
        }
        em.getTransaction().commit();
        return e;
    }

    public boolean crearLaboratorio (Object entidad){
   boolean flag=true;
    EntityManagerFactory  emf = Persistence.createEntityManagerFactory("SiaPersistencia");
    em = emf.createEntityManager();
    EntityTransaction trans = em.getTransaction();

 trans.begin();
    em.persist(entidad);
    trans.commit();


    return flag;

 }

        public int devolverId() {
        int i = 0;
        Query q = em.createQuery("SELECT a.idlaboratorio from Laboratorio a ORDER BY a.idlaboratorio DESC LIMIT 1");
        if (q.getResultList().isEmpty() == true) {
            return 1;
        }
        else {
            i = (Integer) q.getResultList().get(0);
            return (i+1 );
        }
    }

    public boolean borrarLaboratorio(Object entidad) {

        boolean flag = true;
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("SiaPersistencia");
        em = emf.createEntityManager();
        EntityTransaction trans = em.getTransaction();

        trans.begin();
         em.remove(em.merge(entidad));
        trans.commit();

        return flag;

    }

    public boolean updateLaboratorio(Object entidad){
boolean flag = true;
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("SiaPersistencia");
    em = emf.createEntityManager();
    EntityTransaction trans = em.getTransaction();

    trans.begin();
    em.merge(entidad);
    trans.commit();

    return flag;

}

    public Laboratorio encontrarLaboratorio(String nombreLab) {
        Query q = em.createQuery("SELECT a.nombrelaboratorio from Laboratorio");
        if (q.getResultList().isEmpty() == true) {
            return null;
        }
        else {
            return (Laboratorio) q.getSingleResult();
        }
    }

    public Laboratorio encontrarLaboratorioPorDescripcion(String string) {
        Query q = em.createQuery("SELECT a.descripcionlaboratorio from Laboratorio");
        if (q.getResultList().isEmpty() == true) {
            return null;
        }
        else {
            return (Laboratorio) q.getSingleResult();
        }
    }



   
}



